package SparkRDD.RDD算子.Transformations.聚合操作

import org.apache.spark.{SparkConf, SparkContext}
import org.junit.Test

/*
  * foldByKey 和 Spark 中的 reduceByKey 相似，都是按照Key分组去求聚合，但是foldByKey可以指定初始值
  * foldByKey 和 Scala 中的 foldLeft/foldRight 区别是，foldByKey是为每一条数据附上初始值，而Scala中是为整体附上初始值
   *
 */

class foldByKeyTest {

  val conf = new SparkConf().setMaster("local[6]").setAppName("foldByKey")
  val sc   = new SparkContext(conf)

  @Test
  def foldByKey: Unit ={
    sc.parallelize(Seq(("a",1),("b",2),("c",3),("a",1)))
      .foldByKey(zeroValue = 10)((curr,agg)=>curr+agg)
      .collect()
      .foreach(println(_))

  }
}
